package com.pisolution.scheduler.datasource.instance;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * {@link TaskInstance} 相关定制化查询接口.
 *
 * @author sora
 * @version 0.1.0
 */
@Mapper
public interface TaskInstanceMapper extends BaseMapper<TaskInstance> {
    // -------------------------------------------------------------------------------------------------
    //  定制化查询
    // -------------------------------------------------------------------------------------------------

    /**
     * 查询所有受管于给定工作节点并处于特定运行状态的任务实例.
     *
     * @param host 管理该任务实例的工作节点主机地址.
     * @param states 任务实例所处的运行状态.
     *
     * @return 所有符合该限定条件的任务实例对象.
     */
    List<TaskInstance> queryByHostAndState(@Param("host") final String host, @Param("states") final int[] states);

    /**
     * 查询所有隶属于给定工作流实例且处于特定运行状态的任务实例.
     *
     * @param instanceId 任务实例所属的工作流实例.
     * @param state 任务实例所处的运行状态.
     *
     * @return 所有符合该限定条件的任务实例标识集合.
     */
    List<Integer> queryByWorkflowInstanceIdAndState(@Param("instanceId") final int instanceId, @Param("state") final int state);

    /**
     * 查询所有隶属于给定工作流实例的任务实例.
     *
     * @param instanceId 任务实例所属的工作流实例.
     *
     * @return 所有符合该限定条件的任务实例集合.
     */
    List<TaskInstance> queryByWorkflowInstanceId(@Param("instanceId") final int instanceId);
}
